package com.eltsistemas.dao;

import com.eltsistema.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Funcionario;
import java.util.List;

import org.hibernate.Session;

import com.eltsistemas.modelo.Funcionario;
import org.hibernate.Query;

public class FuncionarioDao {

    private Session session;
	
    public FuncionarioDao()
    {
	session = new HibernateUtil().getSession();
        session.beginTransaction();
    }
	
    public void adiciona(Funcionario funcionario)
    {
    	session.save(funcionario);
	session.getTransaction().commit();
        session.close();
    }
	
    public List<Funcionario> lista()
    {
        List<Funcionario>  funcionarioList = session.createCriteria(Funcionario.class).list();
        session.close();
    	return funcionarioList;
    }
	
    public Funcionario exibe(Funcionario funcionario)
    {
	Funcionario encontradoFuncionario= (Funcionario) session.load(Funcionario.class, funcionario.getId());
	return encontradoFuncionario;
    }
	
    public void altera(Funcionario funcionario)
    {
    	session.update(funcionario);
	session.getTransaction().commit();
        session.close();
    }
	
    public void remover(Funcionario funcionario)
    {
    	session.delete(funcionario);
	session.getTransaction().commit();
        session.close();
    }

    public Funcionario buscaCodigo(Funcionario funcionario)
    {
	Query query = this.session.createQuery("from Funcionario " +
                	"where cpf = :cpf or rg = :rg");
		
	query.setString("cpf", funcionario.getCpf());
        query.setString("rg", funcionario.getRg());
				
	Funcionario encontradoFuncionario = (Funcionario) query.uniqueResult();
        session.close();
        return encontradoFuncionario;		
    }
    
    public Funcionario buscaCodigoUp(Funcionario funcionario)
    {
	Query query = this.session.createQuery("from Funcionario " +
                	"where (cpf = :cpf or rg = :rg) and (id != :id) ");
	
        query.setString("cpf", funcionario.getCpf());
        query.setString("rg", funcionario.getRg());
        query.setLong("id", funcionario.getId());
			  
	Funcionario encontradoFuncionario = (Funcionario) query.uniqueResult();
        session.close();
        return encontradoFuncionario;		
    }	
    
}
